//输入一个链表的头节点，从尾到头反过来返回每个节点的值（用数组返回）。 
//
// 
//
// 示例 1： 
//
// 输入：head = [1,3,2]
//输出：[2,3,1] 
//
// 
//
// 限制： 
//
// 0 <= 链表长度 <= 10000 
// Related Topics 栈 递归 链表 双指针 
// 👍 169 👎 0


package leetcode.editor.cn1;

import com.leetcode.entity.ListNode;

//Java：从尾到头打印链表
public class CongWeiDaoTouDaYinLianBiaoLcof {
    public static void main(String[] args) {
        Solution solution = new CongWeiDaoTouDaYinLianBiaoLcof().new Solution();
        // TO TEST

        ListNode head = new ListNode(4);
        ListNode tmp = new ListNode(5);
        head.next = tmp;
        tmp.next = new ListNode(1);
        tmp = tmp.next;
        tmp.next = new ListNode(9);

        int[] results = solution.reversePrint(head);
        for (int result : results) {
            System.out.println(result);
        }
    }
    //leetcode submit region begin(Prohibit modification and deletion)

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     * int val;
     * ListNode next;
     * ListNode(int x) { val = x; }
     * }
     * <p>
     * 链表反转
     */
    class Solution {
        public int[] reversePrint(ListNode head) {
            ListNode tail = null, tmp = head;
            int nlen = 0;
            while (tmp != null) {
                nlen++;
                tmp = tmp.next;
            }
            int[] nums = new int[nlen];
            int i = nlen - 1;
            while (head != null) {
                tmp = head.next;
                head.next = tail;
                tail = head;
                nums[i--] = tail.val;
                head = tmp;
            }
            return nums;
        }
    }
//leetcode submit region end(Prohibit modification and deletion)

}
